import fire
import sys
import logging

import features.asm_note_generate as generate

import features.angr_adapter as adapter

import features.run_juliet as juliet

def note(input_dir: str, output_dir: str, ida_path: str, script_path: str):
    """
    asm注解的生成函数接口
    
    input_dir (str): 输入目录，包含待处理的二进制文件，精确到二进制文件上层目录。
    output_dir (str): 输出目录，用于存储处理结果。
    ida_path (str): IDA Pro 工具的路径，建议为IDA_Pro_7.5_SP3。
    script_path (str): IDA 脚本（inline_determine.py）的路径。
    """
    generate.run_all(input_dir, output_dir, ida_path, script_path)
   
# 调用angr生成cfg的函数接口
# ============================================================================== 
# - input_dir (str): 输入目录，包含待处理的二进制文件所在的文件夹。
# - output_dir (str): 输出目录，用于存储处理结果。
# - graph_types (list): 指定生成的图类型，如 ['cfg', 'cdg', 'ddg', 'cg', 'all']，默认生成所有图。

# ============================================================================== 
def angr(input_dir: str, output_dir: str, graph_types: list = ['all']):

    adapter.batch_processing(input_dir, output_dir, graph_types)
    
def single(bin_dir: str, result_root: str, ida_path: str, script_path: str):
    """
    juliet注解的生成函数接口
    
    bin_dir (str): 输入目录，包含待处理的二进制文件，精确到二进制文件上层目录。
    result_root (str): 老注解存储路径。
    ida_path (str): IDA Pro 工具的路径，建议为IDA_Pro_7.5_SP3。
    script_path (str): IDA 脚本（juliet_test.py）的路径。
    """
    
    juliet.run_juliet(bin_dir, result_root, ida_path, script_path)
    
if __name__ == "__main__":

    fire.Fire()